home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / faq / wdj0597.zip / BATTEN.ZIP / ITERATOR.H
C/C++ Source or Header  |  1996-12-06  |  2KB  |  87 lines

  1. // Base class for iterators
  2. template<class T>
  3. class Iterator
  4. {
  5. public:
  6.     virtual BOOL Done() const=0;
  7.     virtual void Start()=0;
  8.     virtual void Next()=0;
  9.     virtual T Item()=0;
  10.     virtual ~Iterator() {};
  11. };
  12.  
  13. // CArray iterator object
  14. template<class TYPE, class ARG_TYPE>
  15. class ArrayIterator : public Iterator<TYPE>
  16. {
  17. private:
  18.     typedef CArray<TYPE,ARG_TYPE> Array;
  19.     Array &m_Array;
  20.     int m_NextItem;
  21. public:
  22.     ArrayIterator(Array &Ar) : m_Array(Ar) {m_NextItem=0;}
  23.     void Start()        {m_NextItem=0;}
  24.     BOOL Done() const    {return m_Array.GetSize()==m_NextItem;}
  25.     void Next()            {m_NextItem++;}
  26.     TYPE Item()            {return m_Array[m_NextItem];}
  27. };
  28.  
  29. // CList iterator object
  30. template<class TYPE, class ARG_TYPE>
  31. class ListIterator : public Iterator<TYPE>
  32. {
  33. private:
  34.     typedef CList<TYPE,ARG_TYPE> DataSet;
  35.     DataSet &m_Data;
  36.     POSITION pos;
  37. public:
  38.     ListIterator(DataSet &Ar) : m_Data(Ar) {pos=NULL;}
  39.     void Start()        {pos=m_Data.GetHeadPosition();}
  40.     BOOL Done() const        {return pos==NULL;}
  41.     void Next()            {m_Data.GetNext(pos);}
  42.     TYPE Item()            {return m_Data.GetAt(pos);}
  43. };
  44.  
  45. // CMap iterator object
  46. template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
  47. class MapIterator : public Iterator<VALUE>
  48. {
  49. private:
  50.     typedef CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> DataSet;
  51.     DataSet &m_Data;
  52.     POSITION pos;
  53. public:
  54.     MapIterator(DataSet &Data) : m_Data(Data) {pos=NULL;}
  55.     void Start()        {pos=m_Data.GetStartPosition();}
  56.     BOOL Done() const        {return pos==NULL;}
  57.     void Next()
  58.         {
  59.         KEY Key; VALUE Value;m_Data.GetNextAssoc(pos,Key,Value);
  60.         }
  61.     VALUE Item()        {POSITION temp=pos;KEY Key; VALUE
  62. Value;m_Data.GetNextAssoc(temp,Key,Value); return Value;}
  63. };
  64.  
  65. // Iterator creation functions
  66. template<class TYPE, class ARG_TYPE>
  67. ArrayIterator<TYPE,ARG_TYPE> *
  68. CreateIterator(CArray<TYPE,ARG_TYPE> &Array)
  69. {
  70.     return new ArrayIterator<TYPE,ARG_TYPE>(Array);
  71. }
  72.  
  73. template<class TYPE, class ARG_TYPE>
  74. ListIterator<TYPE,ARG_TYPE> *
  75. CreateIterator(CList<TYPE,ARG_TYPE> &List)
  76. {
  77.     return new ListIterator<TYPE,ARG_TYPE>(List);
  78. }
  79.  
  80. template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
  81. MapIterator<KEY,ARG_KEY,VALUE,ARG_VALUE>
  82. *CreateIterator(CMap<KEY,ARG_KEY,VALUE,ARG_VALUE> &Map)
  83. {
  84.     return new MapIterator<KEY,ARG_KEY,VALUE,ARG_VALUE>(Map);
  85. }
  86.  
  87.